package com.cskaoyan.javase.thread._7timer;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
 *
 * @since 17:02
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) throws ParseException {

        // 2.创建定时器,定时任务需要在定时器当中执行
        // Timer() 创建一个新计时器。
        Timer timer = new Timer();

        // 1.创建定时任务,创建抽象类TimerTask的实现类对象,也就是重写Runnable接口的run方法
        TimerTask tt1 = new TimerTask() {
            @Override
            public void run() {
                System.out.println("下班了,关机走人,回家玩游戏!");
                // cancel();
                timer.cancel();
            }
        };


        // Timer(boolean isDaemon) 创建一个新计时器，可以指定其相关的线程作为守护程序运行。
        // Timer(String name) 创建一个新计时器，其相关的线程具有指定的名称。
        // Timer(String name, boolean isDaemon) 创建一个新计时器，其相关的线程具有指定的名称，并且可以指定作为守护程序运行。

        // 让定时器执行定时任务,利用Timer类的任务调度成员方法
        // 安排在指定的时间执行指定的任务，只执行一次
        // void schedule(TimerTask task, Date time)
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 日期字符串 --> 日期对象  这是解析的过程
        // Date date = sdf.parse("2023-02-02 17:12:50");
        // timer.schedule(tt1, date);


        // 安排指定的任务在指定的时间开始进行重复的固定延迟执行。每次任务之间的间隔为 period 毫秒值
        // void schedule(TimerTask task, Date firstTime, long period)
        // timer.schedule(tt1, date, 2000);


        // 安排在指定延迟后执行指定的任务,只执行一次
        // void schedule(TimerTask task, long delay)
        // 安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。每次任务之间的间隔为period
        // void schedule(TimerTask task, long delay, long period)

        // tt1任务延迟3s钟执行,然后1s执行一次
        timer.schedule(tt1, 3000, 1000);

        // 关闭定时器
        // timer.cancel();

    }
}
